import { Request, Response, NextFunction } from 'express';

interface CustomError extends Error {
  status?: number;
}

// 全局错误处理中间件
const errorHandler = (err: CustomError, req: Request, res: Response, next: NextFunction): void => {
  console.error('错误详情:', err);

  // 默认错误信息
  const error = {
    success: false,
    message: err.message || '服务器内部错误',
    status: err.status || 500,
    ...(process.env.NODE_ENV === 'development' && { stack: err.stack })
  };

  // 根据错误类型设置不同的响应
  switch (err.name) {
    case 'ValidationError':
      error.status = 400;
      error.message = '数据验证失败';
      break;
    case 'CastError':
      error.status = 400;
      error.message = '无效的数据格式';
      break;
    case 'JsonWebTokenError':
      error.status = 401;
      error.message = '无效的访问令牌';
      break;
    case 'TokenExpiredError':
      error.status = 401;
      error.message = '访问令牌已过期';
      break;
    default:
      break;
  }

  res.status(error.status).json({
    success: error.success,
    message: error.message,
    ...(process.env.NODE_ENV === 'development' && { stack: error.stack })
  });
};

export default errorHandler;
